/*比如我们在window.onresize 事件中要打印当前的浏览器窗口大小，在我们通过拖曳来改变
窗口大小的时候，打印窗口大小的工作1 秒钟进行了10 次。而我们实际上只需要2 次或者3 次。
这就需要我们按时间段来忽略掉一些事件请求，比如确保在500ms 内只打印一次。很显然，我们
可以借助setTimeout 来完成这件事情。*/
var throttle = function ( fn, interval ) {
    var __self = fn, // 保存需要被延迟执行的函数引用
        timer, // 定时器
        firstTime = true; // 是否是第一次调用
    return function () {
        var args = arguments,
            __me = this;
        if ( firstTime ) { // 如果是第一次调用，不需延迟执行
            __self.apply(__me, args);
            return firstTime = false;
        }
        if ( timer ) { // 如果定时器还在，说明前一次延迟执行还没有完成
            return false;
        }
        timer = setTimeout(function () { // 延迟一段时间执行
            clearTimeout(timer);
            timer = null;
            __self.apply(__me, args);
        }, interval || 500 );
    };
};
window.onresize = throttle(function(){
    console.log( 1 );
}, 500 );